package com.wootion.cims.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.wootion.cims.module.basicinformation.plotsetting.dto.PlotDto;
import com.wootion.cims.module.communitypersonal.model.Person;
import com.wootion.cims.module.communityresidence.residencelist.model.Residence;
import com.wootion.cims.module.systemsetting.polt.dto.SysPlotDto;
import com.wootion.cims.module.systemsetting.polt.model.SysPlot;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @Author: LanQiang
 * @Date: 2022/11/21/11:28
 * @Description: 作用xxx
 */
@Mapper
public interface SysPlotDao extends BaseMapper<SysPlot> {
    /**
     * 获取当前用户所能查看的所有小区
     */
    List<SysPlot> findUserIdBySysPlot(@Param("userid")String userid);
    /**
     *  查询所有小区信息/或按照条件查询,并分页返回
     * @param condition
     * @return
     */
    PageDTO<SysPlotDto> findPageDto(@Param("page") PageDTO<SysPlotDto> pageDTO,@Param("condition") String condition,@Param("ids") List<String> ids);

    /**
     * 根据小区名称查询所有小区信息和对应的社区名称
     * @param pageDTO
     * @param condition
     * @return
     */
    PageDTO<PlotDto> findByPageDto(@Param("page")PageDTO<PlotDto> pageDTO, @Param("condition") String condition);
    /**
     * 根据条件查询小区信息以及物业信息
     */
    Page<SysPlot> findByPlotPage(@Param("page") Page<SysPlot> page,@Param("condition") String condition,@Param("ids") List<String> ids);

    /**
     *  查询所有小区信息/或按照条件查询,并分页返回
     * @param condition
     * @return
     */
    PageDTO<PlotDto> findPagePlotDto(@Param("page") PageDTO<PlotDto> pageDTO,@Param("condition") String condition,@Param("ids") List<String> ids);

    /**
     * 更新，添加 ，修改，删除 楼栋/单元 json信息
     * @param id 社区id
     * @param buildingUnit 楼栋/单元json字符串
     * @return
     */
    int updateBuildingUnit(@Param("id") String id,@Param("buildingUnit")String buildingUnit);

    /**
     * 更新，添加 ，修改，删除平房/别墅 json信息
     * @param id 社区id
     * @param bungalowVilla 平方/楼房json字符串
     * @return
     */
    int updateBungalowVilla(@Param("id") String id,@Param("bungalowVilla")String bungalowVilla);

    List<SysPlot> findPlotList(@Param("communityId") String communityId);

    /**
     * 根据用户权限统计他所能看到的所有小区/或者是按照社区或者小区搜索
     * @return
     */
    List<SysPlot> countHouseholdsAvailable(@Param("communityIds") List<String> communityIds,
                                                 @Param("communityId") String communityId,
                                                 @Param("plotId") String plotId);

    /**
     * 统计实际入住人数
     * @return
     */
    List<Residence> countOccupancy(@Param("plotIds") List<String> plotIds);

    /**
     * 统计一个小区的实际入住情况
     * @param plotId
     * @return
     */
    List<Residence> countOneOccupancy(@Param("plotId") String plotId);
    /**
     * 统计一个小区的的房屋总数量，不管是否入住
     * @param plotId
     * @return
     */
    List<Residence> countOnePlot(@Param("plotId") String plotId);
    /**
     * 统计租户住房数
     * @return
     */
    List<Map<String,Object>> countTenant(@Param("abodeIds")List<String> abodeIds);
    /**
     * 统计租户数
     * @return
     */
    List<Map<String,Object>> countTenantNum(@Param("abodeIds")List<String> abodeIds);
    /**
     * 查询当前小区下所建的所有房屋
     * @param plotIds
     * @return
     */
    List<Residence> countPlotId(@Param("plotIds") List<String> plotIds);
    /**
     *统计住宅总数
     */
    List<Residence> typeMapCount(@Param("plotIds") List<String> plotIds);
    /**
     * 统计某个一个小区下的所有住宅的入住人数
     * @param abodeIds
     * @return
     */
    List<Person> countPerson(@Param("abodeIds")List<String> abodeIds);
    
    int updateHouseholdsAvailable(@Param("id")String id);

}
